What is vinyl-source-stream?
vinyl-source-stream is a Node.js package that converts a readable stream into a vinyl file object that can be used with gulp and other vinyl-based build systems. It is particularly useful for integrating browserify with gulp.
What are vinyl-source-stream's main functionalities?
Convert Readable Stream to Vinyl File
This feature allows you to convert a readable stream (such as the output of browserify) into a vinyl file object. The code sample demonstrates how to use vinyl-source-stream to convert the browserify bundle stream into a vinyl file named 'bundle.js' and then pipe it to a gulp destination.
const browserify = require('browserify');
const source = require('vinyl-source-stream');
browserify('./src/index.js')
.bundle()
.pipe(source('bundle.js'))
.pipe(gulp.dest('./dist'));
Other packages similar to vinyl-source-stream
vinyl-buffer
vinyl-buffer is a package that converts streaming vinyl files to use buffers. It is often used in conjunction with vinyl-source-stream to handle streams that need to be buffered for further processing. While vinyl-source-stream converts a readable stream to a vinyl file, vinyl-buffer converts the vinyl file's contents to a buffer.
gulp-streamify
gulp-streamify is a package that allows you to use streaming plugins with gulp. It wraps streaming plugins so they can be used in a gulp pipeline. Unlike vinyl-source-stream, which converts a readable stream to a vinyl file, gulp-streamify focuses on making streaming plugins compatible with gulp.
gulp-tap
gulp-tap is a package that allows you to tap into a gulp pipeline and perform operations on each file. It provides a way to interact with vinyl files in a gulp stream. While vinyl-source-stream is used to convert streams to vinyl files, gulp-tap is used to manipulate vinyl files within a gulp pipeline.
vinyl-source-stream 

Use conventional text streams at the start of your
gulp or
vinyl pipelines, making for nicer
interoperability with the existing npm stream ecosystem.
Take, for example, browserify. There are the
gulp-browserify and
gulpify plugins, which you can use in
combination with gulp to get browserify working in your build. Unfortunately,
these plugins come with additional overhead: an extra GitHub repository, npm
module, maintainer, tests, semantics, etc. It's much simpler
in this case to use the original module directly where you can, which is what
vinyl-source-stream
handles for you.
Usage

Our previous example, browserify, has a streaming API for its output bundles
which you can use directly. This module is just a bridge that makes it
simple to use conventional text streams such as this in combination with gulp.
Here's an example of using vinyl-source-stream
and browserify
, compared to
using gulpify
:
var source = require('vinyl-source-stream')
var streamify = require('gulp-streamify')
var browserify = require('browserify')
var uglify = require('gulp-uglify')
var gulpify = require('gulpify')
var rename = require('gulp-rename')
var gulp = require('gulp')
gulp.task('gulpify', function() {
gulp.src('index.js')
.pipe(gulpify())
.pipe(uglify())
.pipe(rename('bundle.js'))
.pipe(gulp.dest('./'))
})
gulp.task('browserify', function() {
var bundleStream = browserify('./index.js').bundle()
bundleStream
.pipe(source('index.js'))
.pipe(streamify(uglify()))
.pipe(rename('bundle.js'))
.pipe(gulp.dest('./'))
})
Not all that different, really! The nice thing here is that you're getting the
up-to-date browserify API and don't have to worry about the plugin's available
functionality. Of course, these same benefits apply for any readable text
stream you can find on npm.
API
stream = sourceStream([filename])
Creates a through stream which takes text as input, and emits a single
vinyl file instance for streams down the pipeline to consume.
filename
is a "pretend" filename to use for your file, which some streams
might use to determine various factors such as the final filename of your file.
It should be a string, and though recommended, using this argument is optional.
License
MIT. See LICENSE.md for details.